package br.uniceub.fsw.academicmobile.dao;

import br.uniceub.fsw.academicmobile.vo.CursoVO;
import br.uniceub.fsw.academicmobile.vo.MaterialVO;
import br.uniceub.fsw.academicmobile.vo.ProfessorVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.ResultSet;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Dao responsável pelas operaçoes de banco associadas ao objeto Tura
 * @author Christian Moryah
 */
public class TurmaDAO {

    private BD bd;

    public TurmaDAO() {
            bd = new BD();
    }
    
    /**
     * Retorna lista de turmas associadas ao professor
     * @param professor vo contendo id do professor
     * @return ArrayList lista de professores
     */
    public ArrayList consultarTurmaPorProfessor(ProfessorVO professor){
        
        String SQL = "SELECT * FROM tb_turma WHERE tb_professor_ID_CD_drt = <01>";
        SQL = SQL.replaceAll("<01>", professor.getIdCdDrt().toString());
        ArrayList listaTurmas = new ArrayList();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                TurmaVO turma = new TurmaVO();
                turma.setIdTurma(rs.getInt("ID_turma"));
                turma.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_ID_CD_disciplina"));
                turma.setTbProfessorIdCdDrt(rs.getLong("tb_professor_ID_CD_drt"));
                turma.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
                turma.setHrTurno(rs.getString("HR_turno"));
                turma.setHrTurma(rs.getString("HR_turma"));
                turma.setSgTurma(rs.getString("SG_turma"));
                turma.setDtAno(rs.getInt("DT_ano"));
                turma.setNrSemestre(rs.getInt("NR_semestre"));
                listaTurmas.add(turma);
            }
        } catch (Exception ex){
            System.err.println("TurmaDAO.consultarTurmaPorProfessor:"
					+ ex.getMessage());
        }
        return listaTurmas;
    }
    
    /**
     * Retorna turma a partir de seu id
     * @param turma vo carregando o id da turma
     * @return objeto TurmaVO
     */
    public TurmaVO consultarTurmaPorId(TurmaVO turma){
        String SQL = "SELECT * FROM tb_turma WHERE ID_turma = <01>";
        SQL = SQL.replaceAll("<01>", turma.getIdTurma().toString());
        TurmaVO retorno = new TurmaVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){
                retorno.setIdTurma(rs.getInt("ID_turma"));
                retorno.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_ID_CD_disciplina"));
                retorno.setTbProfessorIdCdDrt(rs.getLong("tb_professor_ID_CD_drt"));
                retorno.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
                retorno.setHrTurno(rs.getString("HR_turno"));
                retorno.setHrTurma(rs.getString("HR_turma"));
                retorno.setSgTurma(rs.getString("SG_turma"));
                retorno.setDtAno(rs.getInt("DT_ano"));
                retorno.setNrSemestre(rs.getInt("NR_semestre"));
            }
        } catch (Exception ex){
            System.err.println("TurmaDAO.consultarTurmaPorId:"
					+ ex.getMessage());
        }
        return retorno;
    }
    
    /**
     * Retorna lista de turmas a partir de um curso
     * @param curso vo carregando id do curso
     * @return ArrayList lista de turmas
     */
    public ArrayList consultarTurmaPorCurso(CursoVO curso){
        String SQL = "SELECT * FROM tb_turma WHERE tb_curso_ID_CD_curso = <01>";
        SQL = SQL.replaceAll("<01>",curso.getIdCdCurso().toString());
        ArrayList listaTurmas = new ArrayList();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                TurmaVO retorno = new TurmaVO();
                retorno.setIdTurma(rs.getInt("ID_turma"));
                retorno.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_ID_CD_disciplina"));
                retorno.setTbProfessorIdCdDrt(rs.getLong("tb_professor_ID_CD_drt"));
                retorno.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
                retorno.setHrTurno(rs.getString("HR_turno"));
                retorno.setHrTurma(rs.getString("HR_turma"));
                retorno.setSgTurma(rs.getString("SG_turma"));
                retorno.setDtAno(rs.getInt("DT_ano"));
                retorno.setNrSemestre(rs.getInt("NR_semestre"));
                listaTurmas.add(retorno);
            }
        } catch(Exception ex){
            System.err.println("TurmaDAO.consultarTurmaPorCurso: " + ex.getMessage());
        }
         return listaTurmas;
    }
    
    /**
     * Retorna lista de turmas a partir de um professor
     * @param pVO vo carregando id do professor
     * @return List lista de turmas
     */
    public List<TurmaVO> getTurmaForProfessor(ProfessorVO pVO)throws Exception{
		String SQL = "select * from tb_turma where tb_professor_ID_CD_drt = "+pVO.getIdCdDrt();
		ResultSet rs = bd.getResultSet(SQL);
		ArrayList listaTurma = new ArrayList<TurmaVO>();
		while(rs.next()){
			TurmaVO tVO= new TurmaVO();
			tVO.setProfessor(pVO);
                        tVO.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
			tVO.getCurso();
                        tVO.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_id_cd_disciplina"));
                        tVO.getDisciplina();
			tVO.setIdTurma(rs.getInt("ID_turma"));
			tVO.setSgTurma(rs.getString("SG_turma"));
			tVO.setHrTurno(rs.getString("HR_turno"));
			tVO.setHrTurma(rs.getString("HR_Turma"));
			tVO.setNrSemestre(rs.getInt("NR_semestre"));
			listaTurma.add(tVO);
		}
		return listaTurma;
	}
    
    /**
     * Retorna primeiro objeto turma associado a uma disciplina
     * @param id id da disciplina
     * @return objeto TurmaVO
     * @throws java.lang.Exception
     * método possívelmente defasado
     */
    public TurmaVO getTurmaByDisciplina(int id)throws Exception{
		String SQL = "SELECT * FROM academicmobile.tb_turma t where tb_disciplina_ID_CD_disciplina="+id;
		ResultSet rs = bd.getResultSet(SQL);
		
		rs.next();
			TurmaVO tVO= new TurmaVO();
                        tVO.setTbProfessorIdCdDrt(rs.getLong("tb_professor_ID_CD_drt"));
                        tVO.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_id_cd_disciplina"));
                        tVO.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
			tVO.getProfessor();
			tVO.getClass();
                        tVO.getDisciplina();
			tVO.setIdTurma(rs.getInt("ID_turma"));
			tVO.setSgTurma(rs.getString("SG_turma"));
			
			tVO.setHrTurno(rs.getString("HR_turno"));
			tVO.setHrTurma(rs.getString("HR_Turma"));
			tVO.setNrSemestre(rs.getInt("NR_semestre"));
			
		return tVO;
	}
    
    /**
     * Retorna conjunto de turmas a partir de um material
     * @param material vo carregando id do material
     * @return ArrayList lista de turmas
     */
    public ArrayList<TurmaVO> consultarTurmaPorMaterial(MaterialVO material){
        String SQL = "SELECT * FROM tb_turma_material WHERE tb_material_ID_material=<01>";
        SQL = SQL.replaceAll("<01>", material.getIdMaterial().toString());
        ArrayList<TurmaVO> listaTurmas = new ArrayList<TurmaVO>();
        try {
            ResultSet rs = bd.getResultSet(SQL);
            while (rs.next()) {
                SQL = "SELECT * FROM tb_turma WHERE ID_turma = <01>";
                SQL = SQL.replaceAll("<01>",""+rs.getInt("tb_turma_ID_turma"));
                ResultSet rs2 = bd.getResultSet(SQL);
                while(rs2.next()){
                    TurmaVO turma = new TurmaVO();
                    turma.setDtAno(rs2.getInt("DT_ano"));
                    turma.setHrTurma(rs2.getString("HR_turma"));
                    turma.setHrTurno(rs2.getString("HR_turno"));
                    turma.setIdTurma(rs2.getInt("ID_turma"));
                    turma.setNrSemestre(rs2.getInt("NR_semestre"));
                    turma.setSgTurma(rs2.getString("SG_turma"));
                    turma.setTbCursoIdCdCurso(rs2.getInt("tb_curso_ID_CD_curso"));
                    turma.setTbDisciplinaIdCdDisciplina(rs2.getInt("tb_disciplina_ID_CD_disciplina"));
                    turma.setTbProfessorIdCdDrt(new Long(rs2.getInt("tb_professor_ID_CD_drt")));
                    listaTurmas.add(turma);
                }
            }
        } catch (SQLException ex) {
            System.err.println("TurmaDAO.consultarTurmaPorMaterial: " + ex.getMessage());
        }
        return listaTurmas;
    }
    
}
